解决数组在动态数据操作中的根本局限性。
- 数组昂贵的 $O(n)$ 修改时间带来的关键启示是,物理连续性是问题的根本原因,迫使我们在位置 $i$ 插入或删除元素时必须移动其他元素。
- 如果我们的应用需要频繁且快速的修改(插入/删除),尽管数组具有 $O(1)$ 的随机访问能力,但其效率依然很低。
- 为了实现最优的$O(1)$ 修改复杂度,我们必须找到一种顺序数据结构,从根本上改变元素的存储和排列方式。
- 目标1:将逻辑与物理分离。逻辑顺序不应依赖于物理位置;元素应允许在内存中任意存放。
- 目标2:动态大小。该结构必须能按需即时扩展或收缩,无需周期性地进行昂贵的 $O(n)$ 内存重分配。
- 目标3:常数时间局部修改。一旦找到插入点 $i$,修改序列只需执行常数次指针操作($O(1)$)。
- 这种方法将复杂度从移动数据(元素移位)转移到管理关系(指针)上。
顺序数据结构对比
| 操作 | 数组(目标) | 链式结构(目标) |
|---|---|---|
| 随机访问 | $O(1)$ | $O(n)$(需遍历) |
| 在位置 $i$ 的插入/删除 | $O(n)$(移位) | $O(1)$(指针更新,一旦找到 $i$) |
| 内存分配 | 连续 | 非连续(动态) |